// Cornerstone 服务
import * as cornerstone from '@cornerstonejs/core';
import * as cornerstoneTools from '@cornerstonejs/tools';
import { init as initDicomImageLoader } from '@cornerstonejs/dicom-image-loader';
import { init as initNiftiVolumeLoader } from '@cornerstonejs/nifti-volume-loader';
import { getDicomWebInstances } from "@/api/pacs/dicom/dicom";

/**
 * 初始化提供者
 */
export function initProviders() {
  // 初始化cornerstone核心
  cornerstone.init();

  // 初始化cornerstone工具
  cornerstoneTools.init();
}

/**
 * 初始化WADO图像加载器
 */
export function initCornerstoneWADOImageLoader() {
  // 使用Cornerstone v3的初始化方法
  initDicomImageLoader({
    maxWebWorkers: navigator.hardwareConcurrency || 1,
    startWebWorkersOnDemand: false,
    taskConfiguration: {
      decodeTask: {
        initializeCodecsOnStartup: false,
        strict: false
      }
    }
  });
}

/**
 * 初始化体积加载器
 */
export function initVolumeLoader() {
  // 使用Cornerstone v3的初始化方法
  initNiftiVolumeLoader();
}

/**
 * DICOM数据服务
 */
export class DicomDataService {
  /**
   * 获取系列图像
   * @param {number} studyId - 检查ID
   * @param {string} seriesUid - 系列UID
   * @returns {Promise<Array>} 图像实例数组
   */
  static async getSeriesImages(studyId, seriesUid) {
    try {
      // 这里应该调用实际的API获取图像数据
      // 暂时返回模拟数据
      const response = getDicomWebInstances(studyId, seriesUid);
      if (!response.code == 200) {
        throw new Error(`HTTP error! status: ${response.code}`);
      }
      return await response.json();
    } catch (error) {
      console.error('获取系列图像失败:', error);
      // 返回模拟数据用于测试
      return this.getMockSeriesImages(studyId, seriesUid);
    }
  }

  /**
   * 获取模拟系列图像数据
   * @param {string} studyUid - 检查UID
   * @param {string} seriesUid - 系列UID
   * @returns {Array} 模拟图像实例数组
   */
  static getMockSeriesImages(studyUid, seriesUid) {
    const instances = [];
    for (let i = 1; i <= 10; i++) {
      instances.push({
        StudyInstanceUID: studyUid,
        SeriesInstanceUID: seriesUid,
        SOPInstanceUID: `1.2.3.4.5.6.7.8.9.${i}`,
        InstanceNumber: i,
        ImagePositionPatient: [0, 0, i * 5],
        ImageOrientationPatient: [1, 0, 0, 0, 1, 0],
        PixelSpacing: [1, 1],
        SliceThickness: 5,
        Rows: 512,
        Columns: 512
      });
    }
    return instances;
  }

}